package ch.zbw.vokabeltrainer.logik;

import java.util.ArrayList;
import java.util.Random;
/**
 * Diese Klasse verwaltet das lernen der Karteikarten
 * 
 * @author brunofliri
 *
 */
public class LernBoxStufe {

	private Management man;//Vernkuepfung des Management
	private ArrayList<Karteikarte> box0;//KarteikartenBox der lernstufe 0
	private ArrayList<Karteikarte> box1;//KarteikartenBOx der lernstufe 1
	private ArrayList<Karteikarte> box2;//KarteikartenBox der lernstufe 2
	private ArrayList<Karteikarte> box3;//KarteiKartenBox der Lernstufe 3
	private ArrayList<Karteikarte> box4;//KarteikartenBox der Lernstufe 4
	private ArrayList<Karteikarte> box5;//KarteikartenBox der Lernstufe 5
	private ArrayList<Karteikarte> box6;//KarteikartenBox der letzten Lernstufe
	
	/**
	 * Diser Konstrukter erstellt eine LernBoxStufe und verknuepft diese mit dem aktuellen Management
	 * und initilisiert alle ArraListen.
	 * 
	 * @param referenz Management
	 */
	public LernBoxStufe(Management referenz){
		man=referenz;
		box0= new ArrayList<Karteikarte>();
		box1= new ArrayList<Karteikarte>();
		box2= new ArrayList<Karteikarte>();
		box3= new ArrayList<Karteikarte>();
		box4= new ArrayList<Karteikarte>();
		box5= new ArrayList<Karteikarte>();
		box6= new ArrayList<Karteikarte>();
	}
	/**
	 * Gibt die Karte in einem Zufalls modus  von der Gewuenschten Lernstufe
	 * 
	 * @param lernStufe Interger
	 * @return Karteikarte Object
	 */
	private Karteikarte getKarte(int lernStufe){
		Random r = new Random();//Instansiert einen Zufallsgenerator
		if(lernStufe==0){
			return box0.get(r.nextInt(box0.size())+0);
		}
		else if(lernStufe==1){
			return box1.get(r.nextInt(box1.size())+0);
		}
		else if(lernStufe==2){
			return box2.get(r.nextInt(box2.size())+0);
		}
		else if(lernStufe==3){
			return box3.get(r.nextInt(box3.size())+0);
		}
		else if(lernStufe==4){
			return box4.get(r.nextInt(box4.size())+0);
		}
		else if(lernStufe==5){
			return box5.get(r.nextInt(box5.size())+0);
		}
		else if(lernStufe==6){
			return box6.get(r.nextInt(box6.size())+0);
		}
		return null;
	}
	/**
	 * Sortiert alle Karteikarten und legt diese nach dem Koennen jeweils in die Bertroffene LernstufenBox
	 * Jede Sortierung leert die Lernbox und fuellt diese neu auf.	 * 
	 */
	public void sortieren(){
		ArrayList<Karteikarte> list=man.getThema().getKarteikarten();
		ArrayList<Karteikarte> box0 = new ArrayList<Karteikarte>();
		ArrayList<Karteikarte> box1 = new ArrayList<Karteikarte>();
		ArrayList<Karteikarte> box2 = new ArrayList<Karteikarte>();
		ArrayList<Karteikarte> box3 = new ArrayList<Karteikarte>();
		ArrayList<Karteikarte> box4 = new ArrayList<Karteikarte>();
		ArrayList<Karteikarte> box5 = new ArrayList<Karteikarte>();
		ArrayList<Karteikarte> box6 = new ArrayList<Karteikarte>();
		
		for(Karteikarte karte:list){
			if(karte.getLernerfolg()==0){
				box0.add(karte);
			}
			if(karte.getLernerfolg()==1){
				box1.add(karte);
			}
			if(karte.getLernerfolg()==2){
				box2.add(karte);
			}
			if(karte.getLernerfolg()==3){
				box3.add(karte);
			}
			if(karte.getLernerfolg()==4){
				box4.add(karte);
			}
			if(karte.getLernerfolg()==5){
				box5.add(karte);
			}
			else{
				box6.add(karte);
			}
		}
		this.box0=box0;
		this.box1=box1;
		this.box2=box2;
		this.box3=box3;
		this.box4=box4;
		this.box5=box5;
		this.box6=box6;	
	}
	/**
	 * Gibt die schlechteste karte zurück falls vorhanden
	 * 
	 * @return karteikarte Object
	 */
	public Karteikarte getKarteikarte(){
		if (this.getAktLernStufe()==99){
			return null;
		}
		else{
			return this.getKarte(getAktLernStufe());
		}
	}
	/**
	 * Gibt den aktuelle Lernstufe zurück falss vorhanden
	 * 
	 *Wenn es keine Woeretr gibt wirft diese Methode eine 99 zurueck
	 * 
	 * @return lernstuffe Interger oder 99 fuer keine eintraege
	 */
	private int getAktLernStufe(){
		if(box0.size()>0){
			return 0;
		}
		else if(box1.size()>0){
			return 1;
		}
		else if(box2.size()>0){
			return 2;
		}
		else if(box3.size()>0){
			return 3;
		}
		else if(box4.size()>0){
			return 4;
		}
		else if(box5.size()>0){
			return 5;
		}
		else if(box6.size()>0){
			return 6;
		}
		else {
			return 99;
		}
	}

}
